/**
 * 
 */
package com.nari.heatshare.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.nari.coreframe.service.IGenericService;
import com.nari.heatshare.model.IHeatMeterDataGather;
import com.nari.heatshare.utils.queryvo.HeatMeterDataCustomizedQuery;
import com.nari.heatshare.utils.queryvo.HeatMeterDataRecordExtendQuery;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-19
 */
public interface IHeatMeterDataGatherService extends IGenericService<IHeatMeterDataGather, String> {

	/**
	 * 分页查询热量表数据列表
	 * @param meterNo
	 * @param recordTime
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-6-23
	 */
	public ResultWithPageCond<IHeatMeterDataGather> queryMeterDataPage(String meterNo, 
			Date recordTime, PageCond pageCond) throws Exception;
	
	/**
	 * 分页查询热量表数据定制查询列表
	 * @param projectUID
	 * @param communityUID
	 * @param recordTimeStart
	 * @param recordTimeEnd
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-12-17
	 */
	public ResultWithPageCond<HeatMeterDataCustomizedQuery> queryCustomizedQueryPage(String projectUID, 
			String communityUID, Date recordTimeStart, Date recordTimeEnd,
			PageCond pageCond) throws Exception;
	
	/**
	 * 通过定制查询列表查询与之关联的小区映射表
	 * @param customizedList
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-12-11
	 */
	public Map<String, String> queryReferCommunitysByCustomizedList(List<HeatMeterDataCustomizedQuery> 
			customizedList) throws Exception;
	
	/**
	 * 根据定制查询特征信息(所属小区、抄表时间)统计热量表列表数据个数
	 * @param communityUID
	 * @param recordTime
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-12-11
	 */
	public int countCustomizedHmDataList(String communityUID, Date recordTime) throws Exception;
	
	/**
	 * 根据定制查询特征信息(所属小区、抄表时间)查询热量表数据列表
	 * @param communityUID
	 * @param recordTime
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-12-11
	 */
	public List<IHeatMeterDataGather> queryCustomizedHmDataList(String communityUID, 
			Date recordTime) throws Exception;
	
	/**
	 * 根据热量表数据列表查询数据记录对应的档案资料扩展信息
	 * @param heatMeterDateList
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-12-18
	 */
	public Map<String, HeatMeterDataRecordExtendQuery> queryHmdRecordExtend(List<IHeatMeterDataGather> 
			heatMeterDateList) throws Exception;
	
	/**
	 * 通过所属分摊域ID及抄表日期统计热量表数据的数量
	 * @param shareAreaUID 所属分摊域
	 * @param recordDate 抄表时间
	 * @param calculateType 热表计算关系
	 * 	说明：add:加		subs:减
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-8
	 */
	public int countMeterDatasByAreaUIDAndDate(String shareAreaUID, Date recordDate, 
			String calculateType) throws Exception;
	
	/**
	 * 通过热量表表号及抄表日期统计热量表数据的数量
	 * @param meterNo 热量表表号
	 * @param recordDate 抄表时间
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-8
	 */
	public int countMeterDatasByMeterNoAndDate(String meterNo, Date recordDate) throws Exception;
	
	/**
	 * 根据分摊域分页查询所属热量表数据
	 * @param shareAreaUID 分摊域唯一标识(必须)
	 * @param meterNo 热量表表号(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-1
	 */
	public ResultWithPageCond<IHeatMeterDataGather> queryMeterDataPageByAreaUID(String shareAreaUID, 
			String meterNo, PageCond pageCond) throws Exception;
	
	/**
	 * 根据热量表ID查询某个时间段内的热消耗量
	 * @param meterUID 热量表ID
	 * @param startDate 起始日期
	 * @param endDate 结束日期
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-9
	 */
	public double queryHeatConsumeByMeterUID(String meterUID, Date startDate, 
			Date endDate) throws Exception;
	
	/**
	 * 根据热量表表号、抄表日期查询历史数据
	 * @param meterNo 热量表表号
	 * @param recordTime 抄表日期
	 * @param dataLimit 取回历史数据的条数，若不限制，则取回所有历史数据
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-14
	 */
	public List<IHeatMeterDataGather> queryHistoryMeterData(String meterNo, 
			Date recordTime, Integer dataLimit) throws Exception;
	
	/**
	 * 新增热量表平滑数据(包括人工干预数据和系统自动平滑数据)
	 * @param meterNo 热量表表号
	 * @param recordTime 抄表时间
	 * @param sumHeat 累计热量
	 * @param sumHeatUnit 累计热量单位 1:MWh 2:kWh 3:Gj
	 * @return 返回平滑数据的ID
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-14
	 */
	public String saveTransitionMeterData(String meterNo, Date recordTime, 
			double sumHeat, Integer sumHeatUnit) throws Exception;
	
	/**
	 * 自动平滑热量表数据
	 * @param shareAreaUID
	 * @param startDate
	 * @param endDate
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-15
	 */
	public ResponseMsg saveAutoTransitionMeterData(String shareAreaUID, Date startDate, 
			Date endDate) throws Exception;
	
	/**
	 * 新增或修改热量表数据
	 * 说明：若存在相同表号、相同抄表日期的热量表数据，则无法新增
	 * @param meterData
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-11-13
	 */
	public ResponseMsg saveOrUpdateMeterData(IHeatMeterDataGather meterData) throws Exception;
	
	/**
	 * 统计某一时段内热表的计量值
	 * 说明：若此时段内热表数据少于两条记录，则返回0
	 * @param meterNo
	 * @param startDate
	 * @param endDate
	 * @return 返回计量热量的热量单位为MWh
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-4-28
	 */
	public double calcMeterMeasureDataMWhByPeriod(String meterNo, Date startDate, 
			Date endDate) throws Exception;
}
